通过存储过程清除过期的数据,减少无用数据。
- 计算出要清理的日期、表名等
- 执行清理操作
主要的技术点是:
- 计算出要清理的日期。可以用
dateadd
函数计算 - 执行动态的sql语句。可以用
EXEC (@sql)
语法
参考程序如下
CREATE PROCEDURE [dbo].[cleanData]
-- 要清除的月份的,格式: 201901
-- 如果为NULL,则清除12个月之前的数据
@pYearMonth varchar(6)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TableName NVARCHAR(50),@Sql NVARCHAR(MAX), @Month NVARCHAR(8);
-- 清理12个月之前的,如11月,就清理去年10月的
Select @Month=CONVERT(varchar(6),dateadd(month, -13, getdate()), 112);
if @pYearMonth IS NOT NULL
set @Month=@pYearMonth;
-- Insert statements for procedure here
-- 删除列表
DELETE FROM [dbo].[gstrade_bill_summary] where type='m' and
(
CONCAT(CONVERT(varchar(10), [year]),CONVERT( varchar(10),[sno]))=@Month or
CONCAT(CONVERT(varchar(10), [year]),'0',CONVERT( varchar(10),[sno]))=@Month
);
SET @TableName = CONCAT('aa_info_m_', @Month);
SET @sql = ('drop table '+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N'U') IS NOT NULL
EXEC (@sql) else select 'no table '+@TableName as msg;
SET @TableName = CONCAT('bb_m_', @Month);
SET @sql = ('drop table '+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N'U') IS NOT NULL
EXEC (@sql) else select 'no table '+@TableName as msg;
SET @TableName = CONCAT('dd_m_', @Month);
SET @sql = ('drop table '+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N'U') IS NOT NULL
EXEC (@sql) else select 'no table '+@TableName as msg;
END
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。